// lib\pages\house\location_list.dart
import 'package:enjoy_plus/utils/Toast.dart';
import 'package:enjoy_plus/utils/http.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart';

class LocationList extends StatefulWidget {
  const LocationList({super.key});

  @override
  State<LocationList> createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {
  @override
  void initState() {
    super.initState();
    // 1. 检测是否配置位置授权
    requestLocationPermission();
  }

  /// 检测是否配置位置授权
  Future<void> requestLocationPermission() async {
    try {
      PermissionStatus status = await Permission.location.request();
      if (status.isGranted) {
        ToastUtil.showSuccess('位置授权成功');
        getCurrentLocation();
        // reverseGeocoding(40.065956, 116.350077);
      } else {
        ToastUtil.showError('位置授权失败');
      }
    } catch (e) {
      print(e);
    }
  }

// 地址
  String address = '北京市昌平区政府街19号';

// 高德的 key
  String apiKey = 'ec6f580a9ed57f6731978c15a3a50fb1';
// 基地址
  String baseUrl = 'https://restapi.amap.com/v3';

  Future<void> getCurrentLocation() async {
    late LocationSettings locationSettings;

    if (defaultTargetPlatform == TargetPlatform.android) {
      // 针对Android平台，设置高精度定位、100米距离过滤、强制使用位置管理器等
      locationSettings = AndroidSettings(
          accuracy: LocationAccuracy.high,
          distanceFilter: 100,
          forceLocationManager: true,
          intervalDuration: const Duration(seconds: 10),
          foregroundNotificationConfig: const ForegroundNotificationConfig(
            notificationText:
                "Example app will continue to receive your location even when you aren't using it",
            notificationTitle: "Running in Background",
            enableWakeLock: true,
          ));
    } else if (defaultTargetPlatform == TargetPlatform.iOS ||
        defaultTargetPlatform == TargetPlatform.macOS) {
      // 针对iOS和macOS平台，设置高精度定位、健身活动类型、100米距离过滤等
      locationSettings = AppleSettings(
        accuracy: LocationAccuracy.high,
        activityType: ActivityType.fitness,
        distanceFilter: 100,
        pauseLocationUpdatesAutomatically: true,
        // 只有在应用在后台启动时才设置为true
        showBackgroundLocationIndicator: false,
      );
    } else if (kIsWeb) {
      // 针对Web环境，设置高精度定位、100米距离过滤、5分钟的最大年龄等
      locationSettings = WebSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
        maximumAge: const Duration(minutes: 5),
      );
    } else {
      // 对于其他平台，默认设置高精度定位和100米距离过滤
      locationSettings = const LocationSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
      );
    }
    print('这里在获取定位');
    try {
      print('进入try');
      // 使用配置好的定位设置获取当前位置
      final position = await Geolocator.getCurrentPosition(
          locationSettings: locationSettings);
      print('发送请求');
      // 显示成功获取到的纬度和经度
      // ToastUtil.showSuccess('${position.latitude}, ${position.longitude}');
      print('A:${position.latitude}, B:${position.longitude}');
      await reverseGeocoding(position.latitude, position.longitude);
    } catch (e) {
      // 处理可能出现的异常
      print(e.toString());
      print('出错在这里');
    }
  }

  Future<void> reverseGeocoding(double latitude, double longitude) async {
    // print('这里跑了函数reverseGeocoding');
    String url =
        '$baseUrl/geocode/regeo?key=$apiKey&location=$longitude,$latitude';
    try {
      var response = await http.get(url);
      print(response['regeocode']['formatted_address']);
      setState(() {
        address = response['regeocode']['formatted_address'];
      });
    } catch (e) {
      print('查询过程中出现错误: $e');
    }
  }

  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('选择社区'),
        ),
        body: ListView(
          padding: const EdgeInsets.all(10),
          children: [
            const Row(
              children: [
                Text(
                  '当前地址',
                  style: TextStyle(color: Colors.grey),
                )
              ],
            ),
            const SizedBox(height: 10),
            Container(
              color: Colors.white,
              padding: const EdgeInsets.all(10),
              child: Row(
                children: [
                  Expanded(child: Text(address)),
                  GestureDetector(
                    onTap: () async {
                      getCurrentLocation();
                    },
                    child: const Row(
                      children: [
                        Icon(Icons.location_searching_outlined,
                            color: Colors.blue),
                        SizedBox(width: 2),
                        Text(
                          '重新定位',
                          style: TextStyle(color: Colors.blue),
                        ),
                      ],
                    ),
                  )
                ],
              ),
            ),
            const SizedBox(height: 10),
            const Row(
              children: [
                Text(
                  '附近社区',
                  style: TextStyle(color: Colors.grey),
                )
              ],
            ),
            const SizedBox(height: 10),
            ListView(
                shrinkWrap: true,
                physics: const NeverScrollableScrollPhysics(),
                children: [
                  Container(
                      color: Colors.white,
                      padding: const EdgeInsets.all(10),
                      child: const Row(children: [
                        Expanded(child: Text('北京市昌平区政府街19号')),
                        Row(children: [
                          Icon(Icons.arrow_forward_ios,
                              size: 16, color: Colors.black),
                        ])
                      ]))
                ])
          ],
        ));
  }
}
